<?php
/*
 * Copyright (c) 2011 Joao Paulo Cirino Silva de Novais <joaopaulonovais@gmail.com>
 *
 */

class EscolaDAO extends DAO {

	static function inserir(Model $escola) {

        try {
        	
		    $conn = Conexao::obterConexao();
		    //$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

		    $sql = $conn->prepare("insert into lcd_escola (nom_escola,    nom_razao_social,
                                                           num_cnpj,      des_endereco,
                                                           des_cidade,    des_bairro,
                                                           sig_uf,        cep_escola,
                                                           num_telefone,  des_email,
                                                           des_site,      txt_observacao,
                                                           med_logo,      tip_logo)
                                                   values (?,?,?,?,?,?,?,
                                                           ?,?,?,?,?,?,?)");

		    $sql->execute(array($escola->get("nom_escola")           ,$escola->get("nom_razao_social"),
                                $escola->get("num_cnpj")             ,$escola->get("des_endereco"),
                                $escola->get("des_cidade")           ,$escola->get("des_bairro"),
                                $escola->get("sig_uf")               ,$escola->get("cep_escola"),
                                $escola->get("num_telefone")         ,$escola->get("des_email"),
                                $escola->get("des_site")             ,$escola->get("txt_observacao"),
                                addslashes($escola->get("med_logo")) ,$escola->get("tip_logo")));
       
            $cod_escola = $conn->lastInsertId();
            //Perfis da escola
            foreach ($escola->get("opt_perfil")as $cod_tipo_perfil) {
            
                $sql = $conn->prepare("insert into lcd_escola_perfil (cod_escola, cod_tipo_perfil)
                                                              values (?,?)");
                
                $sql->execute(array($cod_escola,$cod_tipo_perfil));
            }
            //Situacao da escola (PENDENTE)
            $sql = $conn->prepare("insert into lcd_escola_situacao (cod_escola,
	                                                                tip_situacao)
	                                                        values (?,?)");
            
            $sql->execute(array($cod_escola, "P"));
            
	        $conn = null;
            
	        return $cod_escola;

        } catch (Exception $e) {
   	
        	$conn = null;
        	print $e->getMessage();
        }
    }

    static function alterar(Model $escola) { return false; }

    static function remover(Model $escola) { return false; }
    
    static function consultar(Model $escola) {
        //Consulta as escolas aprovadas que tenham ou nao perfil
    	$conn = Conexao::obterConexao();
    	
        $str = "select e.cod_escola, e.nom_escola, e.nom_razao_social, e.num_cnpj
                  from lcd_escola e
                    inner join lcd_escola_situacao s
                      on e.cod_escola = s.cod_escola
                    left outer join lcd_escola_perfil p
                      on e.cod_escola = p.cod_escola
                where s.tip_situacao = 'A'
                    and dat_situacao = (select max(dat_situacao)
                                           from lcd_escola_situacao x
                                         where x.cod_escola = s.cod_escola)";
        //Monta o array na ordem dos parametros informados
        $filtros = Array();

        if ($escola->get("cod_escola")) {
            $str .= " and e.cod_escola =  ?";
            $filtros[] = $escola->get("cod_escola");
        }

        if ($escola->get("nom_escola")) {
            $str .= " and nom_escola like ?";
            $filtros[] = "%".$escola->get("nom_escola")."%";
        }

        if ($escola->get("des_endereco")) {
            $str .= " and des_endereco like ?";
            $filtros[] = "%".$escola->get("des_endereco")."%";
        }

        if ($escola->get("des_cidade")) {
            $str .= " and des_cidade like ?";
            $filtros[] = "%".$escola->get("des_cidade")."%";
        }

        if ($escola->get("des_bairro")) {
            $str .= " and des_bairro like ?";
            $filtros[] = "%".$escola->get("des_bairro")."%";
        }
        
        if ($escola->get("sig_uf")) {
            $str .= " and sig_uf = :sig_uf";
        }

        if ($escola->get("perfis")) {
        	$str .= " and p.cod_tipo_perfil in (?)";
        	$filtros[] = implode(',', $escola->get("perfis"));
        }
        
        $str .= " group by e.cod_escola, e.nom_escola, e.nom_razao_social, e.num_cnpj 
                  order by e.nom_escola";

        $sql = $conn->prepare(trim($str));
	        
        if (empty($filtros)){
            $sql->execute();
        } else {
            $sql->execute($filtros);	
        }
            
        $conn = null;
            
        return $sql->fetchALL(PDO::FETCH_CLASS, "EscolaModel");
    }
    
    static function consultarEscola(Model $escola) {
        try {
       	
	    	$conn = Conexao::obterConexao();
	    	
	        $str = "select nom_escola,nom_razao_social,num_cnpj,des_endereco,
                           des_cidade,des_bairro,sig_uf,cep_escola,num_telefone,
                           des_email,des_site,txt_observacao,med_logo,tip_logo
	                  from lcd_escola e
	                    inner join lcd_escola_situacao es
	                      on e.cod_escola = es.cod_escola
	                where e.cod_escola = ?
	                    and es.tip_situacao = 'A'
	                    and es.dat_situacao = (select max(dat_situacao)
            	                                   from lcd_escola_situacao x
            	                                 where x.cod_escola = es.cod_escola)";
	        
            $sql = $conn->prepare(trim($str));
	        
	        $sql->execute(array($escola->get("cod_escola")));
	        
	        $conn = null;
	
	        return $sql->fetchObject("EscolaModel");
        } catch(PDOException $e) {
        	$conn = null;
        	print $e->getMessage();
        }
    }
    
    static function consultarSituacao($escola,
                                      $tip_situacao) {
        try {
       	
	    	$conn = Conexao::obterConexao();
	    	//TODO: Verificar distinct - consultarSituacao
	        $str = "select distinct e.cod_escola, e.nom_escola, e.nom_razao_social, e.num_cnpj
	                  from lcd_escola e
	                     inner join lcd_escola_situacao s
	                         on e.cod_escola = s.cod_escola
	                     left outer join lcd_escola_perfil p
	                         on e.cod_escola = p.cod_escola
	                where s.dat_situacao = (select max(dat_situacao)
            	                                   from lcd_escola_situacao x
            	                                 where x.cod_escola = s.cod_escola)";
	        
	        $filtros = Array();
            
            if($tip_situacao) {
            	$str .= " and s.tip_situacao = ?";
            	$filtros[] = $tip_situacao;
            }
	        
            if($escola->get("opt_perfil")) {
            	$str .= " and p.cod_tipo_perfil in (?)";
            	$filtros[] = implode(',', $escola->get("opt_perfil"));
            }
            
	        $sql = $conn->prepare(trim($str));
	        
	        if (empty($filtros)) {
	            $sql->execute();
	        } else {
	        	$sql->execute($filtros);
	        }
	        
	        $conn = null;
	
	        return $sql->fetchALL(PDO::FETCH_CLASS, "EscolaModel");
        } catch(PDOException $e) {
        	$conn = null;
        	print $e->getMessage();
        }
    }
    
    static function aprovar($cod_escola) {

    	$conn = Conexao::obterConexao();
        $sql = $conn->prepare("insert into lcd_escola_situacao (cod_escola,
	                                                                tip_situacao)
	                                                        values (?,?)");
            
        return $sql->execute(array($cod_escola, "A"));
    }    
}

?>